package 中等.数学;

/**
 * 求解一个给定的方程，将x以字符串 "x=#value" 的形式返回。该方程仅包含 '+' ， '-' 操作，变量 x 和其对应系数。
 * 如果方程没有解，请返回 "No solution" 。如果方程有无限解，则返回 “Infinite solutions” 。
 * 题目保证，如果方程中只有一个解，则 'x' 的值是一个整数。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/solve-the-equation
 */
public class 求解方程_640 {

    public static void main(String[] args) {

        System.out.println(solveEquation("x+5-3+x=6+x-2"));
    }

    /**
     * 无解的情况 x 的系数为 0 ，数字和不为 0
     * 无限解的情况 x 的系数为0，数字和为 0
     *
     * @param equation
     * @return
     */
    public static String solveEquation(String equation) {
        char[] chars = equation.toCharArray();
        int xPart = 0, numPart = 0;
        int left = 0;
        int flag = 1;
        while (left < equation.length()) {
            if (chars[left] == '=') {
                left++;
                flag = -1;
            }
            int right = left + 1;
            while (right < equation.length()) {
                if ((chars[right] == '+' || chars[right] == '-') || chars[right] == '=') {
                    break;
                }
                right++;
            }
            String curStr = equation.substring(left, right);
            if (chars[right - 1] == 'x') {
                curStr = curStr.replace("x", "");
                if ("".equals(curStr) || "+".equals(curStr)) {
                    xPart += flag * 1;
                } else if ("-".equals(curStr)) {
                    xPart -= flag * 1;
                } else {
                    xPart += flag * Integer.valueOf(curStr);
                }
            } else {
                numPart -= flag * Integer.valueOf(curStr);
            }
            left = right;
        }

        if (xPart == 0 && numPart != 0) {
            return "No solution";
        }
        if (xPart == 0 && numPart == 0) {
            return "Infinite solutions";
        }
        return "x=" + numPart / xPart;
    }

}
